Giao thức cho nhóm nhiều hơn hai người Trao đổi khóa Diffie-Hellman

Giao thức Diffie-Hellman không giới hạn việc thỏa thuận khóa chỉ cho hai bên tham gia. Bất kỳ số lượng người sử dụng nào cũng có thể tham gia vào giao thức để tạo khóa bí mật chung bằng cách thực hiện lặp lại các bước trao đổi thông tin và tính toán trong giao thức.

Nguyên tắc cơ bản

Trước tiên xét ví dụ Alice, Bob và Carol cùng tham gia giao thức Diffie-Hellman như sau (tất cả tính toán dưới đây dựa trên modulo p {\displaystyle p} ):

  1. Các bên thỏa thuận trước về các tham số p {\displaystyle p} và g {\displaystyle g} .
  2. Mỗi bên tự tạo khóa riêng tư, gọi tên là a {\displaystyle a} , b {\displaystyle b} , và c {\displaystyle c} .
  3. Alice tính g a mod p {\displaystyle g^{a}\mod p} và gửi cho Bob.
  4. Bob tính ( g a ) b mod p = g a b mod p {\textstyle (g^{a})^{b}\mod p=g^{ab}\mod p} và gửi cho Carol.
  5. Carol tính ( g a b ) c mod p = g a b c mod p {\displaystyle (g^{ab})^{c}\mod p=g^{abc}\mod p} và sử dụng giá trị đó làm khóa bí mật chia sẻ.
  6. Bob tính g b mod p {\displaystyle g^{b}\mod p} và gửi cho Carol.
  7. Carol tính ( g b ) c mod p = g b c mod p {\displaystyle (g^{b})^{c}\mod p=g^{bc}\mod p} và gửi cho Alice.
  8. Alice tính ( g b c ) a mod p = g b c a mod p = g a b c mod p {\displaystyle (g^{bc})^{a}\mod p=g^{bca}\mod p=g^{abc}\mod p} và sử dụng giá trị đó làm khóa bí mật chia sẻ.
  9. Carol tính g c mod p {\displaystyle g^{c}\mod p} và gửi cho Alice.
  10. Alice tính ( g c ) a mod p = g c a mod p {\displaystyle (g^{c})^{a}\mod p=g^{ca}\mod p} và gửi cho Bob.
  11. Bob tính ( g c a ) b mod p = g c a b mod p = g a b c mod p {\displaystyle (g^{ca})^{b}\mod p=g^{cab}\mod p=g^{abc}\mod p} và sử dụng giá trị đó làm khóa bí mật chia sẻ.

Một kẻ nghe lén có thể quan sát được g a mod p {\displaystyle g^{a}\mod p} , g b mod p {\displaystyle g^{b}\mod p} , g c mod p {\displaystyle g^{c}\mod p} , g a b mod p {\displaystyle g^{ab}\mod p} , g a c mod p {\displaystyle g^{ac}\mod p} , và g b c mod p {\displaystyle g^{bc}\mod p} , nhưng không thể tận dụng được bất cứ tổ hợp nào của những giá trị này để tính ra được g a b c {\displaystyle g^{abc}} .

Cơ chế này có thể được mở rộng cho N {\displaystyle N} người dựa vào hai nguyên tắc cơ bản sau:

  • Bắt đầu giao thức với một khóa "rỗng" chỉ chứa g {\displaystyle g} . Bí mật mỗi bên được tạo ra bằng cách tính lũy thừa của giá trị hiện tại lưu tại mỗi bên với phần riêng tư của mỗi bên (lũy thừa của lượt đầu tiên chính là khóa công khai của mỗi bên). Nguyên tắc này có thể được thực hiện theo bất kỳ thứ tự nào.
  • Bất kỳ giá trị tạm thời nào (với số lượt tính từ N − 1 {\displaystyle N-1} trở xuống, trong đó N {\displaystyle N} là số lượng người trong nhóm) đều có thể truyền công khai, ngoại trừ giá trị cuối cùng (đã tính hết N {\displaystyle N} lượt lũy thừa) sẽ tạo thành bí mật chia sẻ (vì vậy không được để lộ giá trị của lượt cuối cùng). Do đó, mỗi người phải tính bí mật chia sẻ chung bằng cách áp dụng khóa riêng tư của mình sau cùng (nếu không sẽ không có cách nào cho người cuối cùng truyền được khóa cuối cùng cho người nhận, vì người cuối cùng sẽ biến khóa đó thành khóa bí mật mà cả nhóm muốn bảo vệ).

Thứ tự sắp xếp

Phương pháp vòng tròn

Các nguyên tắc trên cho phép thực hiện theo bất kỳ thứ tự nào giữa những người tham gia. Cách đơn giản và dễ hiểu nhất có lẽ là sắp xếp N {\displaystyle N} người tham gia theo vòng tròn và chuyển N {\displaystyle N} khóa theo vòng tròn cho tới khi mỗi khóa được chuyển tới tất cả N {\displaystyle N} người tham gia (kết thúc với người sở hữu khóa đó) và mỗi người đã đóng góp phần của mình trong N {\displaystyle N} khóa đó (kết thúc với khóa của riêng mỗi người). Cách này yêu cầu mỗi người thực hiện N {\displaystyle N} phép tính modulo lũy thừa.

Phương pháp chia để trị

Có thể thấy rằng trong quá trình tính toán các khóa có thể bị tính trùng lặp bởi các bên tham gia. Như vậy một thứ tự tốt khác có thể giúp ta giảm số lượng phép tính modulo lũy thừa tính bởi mỗi người tham gia xuống. Cụ thể, số lượng phép tính lũy thừa có thể giảm xuống còn log 2 ⁡ ( N ) + 1 {\displaystyle \log _{2}(N)+1} bằng cách sử dụng kiểu phương pháp chia để trị. Ví dụ sau minh họa phương pháp này cho 8 người:

  1. Mỗi người A, B, C, và D thực hiện một phép tính lũy thừa để tính g a b c d mod p {\displaystyle g^{abcd}\mod p} ; giá trị này được gửi đến E, F, G, và H. Ngược lại A, B, C, và D nhận g e f g h mod p {\displaystyle g^{efgh}\mod p} .
  2. A và B mỗi người thực hiện một phép tính lũy thừa để tính g e f g h a b mod p {\displaystyle g^{efghab}\mod p} , rồi gửi cho C và D. Ngược lại C và D làm tương tự để tính g e f g h c d mod p {\displaystyle g^{efghcd}\mod p} và gửi cho A và B.
  3. A thực hiện một phép tính lũy thừa để tính g e f g h c d a mod p {\displaystyle g^{efghcda}\mod p} , sau đó gửi cho B. Tương tự, B tính và gửi g e f g h c d b mod p {\displaystyle g^{efghcdb}\mod p} cho A. Bên C và D cũng thực hiện tương tự.
  4. A thực hiện một phép tính lũy thừa cuối cùng để có được bí mật g e f g h c d b a = g a b c d e f g h mod p {\displaystyle g^{efghcdba}=g^{abcdefgh}\mod p} , trong khi đó B cũng tính tương tự để có g e f g h c d a b mod p = g a b c d e f g h mod p {\displaystyle g^{efghcdab}\mod p=g^{abcdefgh}\mod p} . Và cũng như vậy, C và D cũng tìm được bí mật chia sẻ chung.
  5. Những người từ E đến H cũng cùng lúc thực hiện các bước như trên cho giá trị nhận được g a b c d mod p {\displaystyle g^{abcd}\mod p} từ phía nhóm kia và tính được bí mật chia sẻ chung.

Sau khi các bước này hoàn tất thì tất cả mọi người tham gia đều có bí mật g a b c d e f g h mod p {\displaystyle g^{abcdefgh}\mod p} , trong đó mỗi người chỉ thực hiện 4 phép tính lũy thừa so với 8 trong trường hợp thứ tự vòng tròn như trên.

Tài liệu tham khảo

WikiPedia: Trao đổi khóa Diffie-Hellman http://www.cacr.math.uwaterloo.ca/hac/ http://cryptocellar.web.cern.ch/cryptocellar/cesg/... http://cryptocellar.web.cern.ch/cryptocellar/cesg/... http://code.google.com/p/sacct/ http://docs.google.com/viewer?a=v&pid=sites&srcid=... http://video.google.com/videoplay?docid=8991737124... http://www.google.com/patents?vid=4.2 http://www.google.com/patents?vid=4200770 http://www.jya.com/ellisdoc.htm http://www.rsasecurity.com/rsalabs/node.asp?id=230...